#ifndef VIEWMODELMANAGER_H
#define VIEWMODELMANAGER_H

#include <unordered_map>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
#include <QString>
#include <QFile>

#include "login/loginviewmodel.h"
#include "base/baseviewmodel.h"
#include "base/basefileparser.h"
#include "base/baseviewmodelmanager.h"
#include "fileparser/jsonfileparser.h"
#include "factory/viewmodelfactory.h"
#include "factory/fileparserfactory.h"

// 测试用
#include <QMessageBox>

/**
 * @brief The ViewModelManager class
 * 所有viewmodel的管理类，负责保存、切换viewmodel
 */
class ViewModelManager : public BaseViewModelManager
{
public:
    static ViewModelManager& instance();
public:
    // 调用switchView切换下一个视图
    void update(const std::string& nextViewModelName);

    // 通过view的名称进行切换view
    void switchView(const std::string& viewModelName);

    template<typename T>
    void switchView();

private:
    ViewModelManager();
    void init(const QString& jsonFile);

private:
    // 通过使用string：viewmodel的形式，进行view切换时可以传入两个view的名称string进行切换
    // 保存 viewmodel:viewmodel 指针键值对
    std::unordered_map<std::string,QSharedPointer<BaseViewModel>> m_viewModelMap;
    QSharedPointer<BaseViewModel> m_curViewModelPtr; // 当前展示的view的指针
};

#endif // VIEWMODELMANAGER_H
